package com.wzl.customviewproject.page;

import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.ViewPager2;

import com.google.android.material.tabs.TabLayoutMediator;
import com.wzl.customviewproject.R;
import com.wzl.customviewproject.adapter.XiaoTypeAdapter;
import com.wzl.customviewproject.interfaces.OnItemClickListener;
import com.wzl.customviewproject.util.CenterLayoutManager;

import java.util.ArrayList;
import java.util.List;

/**
 * 仿小米商城分类页页面（滑动冲突+自定义view都用到了）
 * 左边是一个ITEM列表，点击字体加粗变大，最左侧出现黄色条状。ITEM列表平分屏幕高度。
 * 右侧最上方是一个图片，下面是一个分类布局可以横向滑动，再下面是具体每个分类的商品列表。
 * 当滑动到最上面以及最下面的时候，最左侧ITEM切换，右侧页面刷新。
 *  往下滑动的时候，显示的上一页的数据显示的都是最顶层的数据。而往上滑动，滑动的内容还是当前页的内容。
 *
 *  实现思路：
 *  整体还是一个tabLayout和viewpager
 *  viewpager内部嵌套一个滑动布局。
 *  有两个问题：
 *  1、tabLayout默认不支持纵向展示，所以需要自定义view去处理。解决：不用tabLayout了，改用RecyclerView来做展示。
 *  2、viewpager和滑动布局同向滑动导致的滑动冲突问题。
 *
 *  右侧布局有几个问题：
 *  1、手指向上滑的时候会出现冲突
 *  2、手指向下滑要判断当前内容页是否到顶部，如果是，那么切换页面；如果不是，那么就继续上滑。
 *  3、切换页面的新页面默认显示在最顶部。     解决：让父view拦截事件之后，让recyclerview调用scrollToPosition回到顶部。这样方式不可行，会有bug。
 *  4、滑动列表的时候未到底部的时候不会直接滑动到下一个分类，需要有一个上拉的动作
 */
public class XiaoMiTypeActivity extends AppCompatActivity {

    private TabLayoutMediator mediator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xiao_mi_type);

        RecyclerView recyclerView = findViewById(R.id.recyclerView1);
        CenterLayoutManager centerLayoutManager = new CenterLayoutManager(this);
        recyclerView.setLayoutManager(centerLayoutManager);

        ViewPager2 vp2 = findViewById(R.id.viewPager2);
//        XiaoMiFragmentsAdapter fragmentsAdapter = new XiaoMiFragmentsAdapter(getSupportFragmentManager(),getLifecycle());

//        vp2.setAdapter(fragmentsAdapter);


        List<String> list = new ArrayList<>();
        list.add("推荐");
        list.add("XiaoMi手机");
        list.add("RedMi手机");
/*        list.add("游戏手机");
        list.add("电脑平板");
        list.add("智能穿戴");
        list.add("电视");
        list.add("大家电");
        list.add("小家电");
        list.add("智能家居");
        list.add("户外出行");
        list.add("日用百货");
        list.add("儿童用品");
        list.add("有品精选");
        list.add("小米服务");*/


        vp2.setOffscreenPageLimit(1);
        XiaoTypeAdapter adapter = new XiaoTypeAdapter(this, list);
        recyclerView.setAdapter(adapter);
        //相互联动
        vp2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
                Log.d("LPL", "onPageSelected: change:"+position);
                super.onPageSelected(position);
                adapter.setCurrentItem(position);
                centerLayoutManager.smoothScrollToPosition(recyclerView,new RecyclerView.State(),position);

                //现在的问题是我在滑动viewpager也就是翻页的时候要将翻页的页面重新置为顶部
                //构想2种方式：1、页面重新添加  2、recyiclerview滑动至顶部。


            }


        });
        adapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void setOnItemClickListener(int position) {
                Log.d("LPL", "setOnItemClickListener: ITEM:"+position);
                centerLayoutManager.smoothScrollToPosition(recyclerView,new RecyclerView.State(),position);
                adapter.notifyDataSetChanged();
                vp2.setCurrentItem(position,false);
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mediator.detach();
    }
}